Kotlin中反射机制的使用语法

您所在的位置:网站首页 kotlin 静态方法 Kotlin中反射机制的使用语法

Kotlin中反射机制的使用语法

2023-12-01 06:45| 来源: 网络整理| 查看: 265

val hClass_1 = Human::class.java//获取Human类的class属性 val constructor_1 = hClass_1.getDeclaredConstructor(String::class.java) val human_1=constructor_1.newInstance() val hClass_2 = Human::class//获取Human类的Kclass属性 val allConstructors_2 = hClass_2.constructors val constructor = allConstructors_2.stream().filter { it.parameters.size == 1 }.findAny().get().javaConstructor val human_2=constructor.newInstance() 调用类的方法

通过class对象或者kclass对象获取指定的method方法,返回method类型的对象,调用该method对象中的invoke(Object obj,Object…args)方法来调用函数方法,第一个参数对应调用该方法的实例对象,第二个参数对应该方法的参数,可以传递多个参数。

val hClass_1 = Human::class.java//获取Human类的class属性 val human_1=hClass_1.newInstance() as Human val declareMethod_1 = hClass_1.getDeclaredMethod("say", String::class.java) declareMethod_1.isAccessible = true//设置private私有方法可以访问 declareMethod_1.invoke(human_1, "Hello~!") val hClass_2 = Human::class//获取Human类的Kclass属性 val human_2=hClass_2.createInstance() val methods_2 = hClass_2.memberFunctions//获取class对象的所有的方法,包括父类的方法 val method_2 = methods_2.stream().filter { it.name == "say" }.findAny().get().javaMethod method_2!!.isAccessible = true//设置private私有方法可以访问 method_2.invoke(human_2, "Bingo~") 访问成员变量值

通过class对象或者kclass获取指定的Field成员变量,返回Field类型的成员变量对象。Field提供了两组方法来读取或设置成员变量的值,通过get(Object obj)方法来获取指定obj对象实例的该成员变量的值,通过set(Object obj,XXX val)方法来设置指定obj对象实例的该成员变量的值为val值。PS:对于8种原生的基本数据类型,有相对应的优化方法,如getInt,getDouble,setInt,setDouble

val hClass_1 = Human::class.java//获取Human类的class属性 val human_1=hClass_1.newInstance() as Human val code_1: Field = hClass_1.getField("code") println(code_1.get(human_1)) code_1.set(human_1,"0000") val hClass_2 = Human::class//获取Human类的Kclass属性 val human_2=hClass_2.createInstance() val publicFields_2 = hClass_2.memberProperties val nameField_2 = publicFields_2.stream().filter { it.name == "name" }.findAny().get().javaField nameField_2!!.isAccessible = true nameField_2.set(human_2, "JasonChen") println(nameField_2.get(human_2))


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3